home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
050
/
turbdir.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-06-03
|
5KB
|
204 lines
program dir;
{$i-,u-,c-}
type
registers=record
ax,bx,cx,dx,bp,si,di,ds,es,flags:integer;
end;
char80arr=array[1..80] of char;
string80=string[80];
var
dta:array[1..43] of byte;
dtaseg,
dtaofs,
setdtaseg,
setdtaofs,
error,
i,j,
att,option:integer;
regs:registers;
buffer,
namr:string80;
mask:char80arr;
procedure setdta(segment,offset:integer;var error:integer);
begin
regs.ax:=$1a00;
regs.ds:=segment;
regs.dx:=offset;
msdos(regs);
error:=regs.ax and $ff;
end;
procedure getcurrentdta(var segment,offset:integer; var error:integer);
begin
regs.ax:=$2f00;
msdos(regs);
segment:=regs.es;
offset:=regs.bx;
error:=regs.ax and $ff;
end;
procedure getoption(var option:integer);
var
ch:char;
begin
ch:='?';
option:=1;
while (ch='?') do
begin
write('File option to use, [?] for list :');
readln(ch);
writeln;
case(ch) of
'1':option :=1;
'2':option :=7;
'3':option :=8;
'4':option :=16;
'5':option :=22;
'6':option :=31;
'?':begin
writeln('FIle options are : ');
writeln;
writeln('[1] for standard files [default].');
writeln('[2] for system or hidden files');
writeln(' and standard files');
writeln('[3] for volume label');
writeln('[4] for directories and standard files');
writeln('[5] for directories,hidden or system');
writeln(' files and standard files');
writeln('[6] same as 5, but with volume');
writeln(' label included');
writeln;
end;
else
option :=1;
end; {case}
end;
end;
procedure getfirst(mask:char80arr;var namr:string80;segment,offset:integer;option:integer; var error:integer);
var
i:integer;
begin
error:=0;
regs.ax:=$4e00;
regs.ds:=seg(mask);
regs.dx:=ofs(mask);
regs.cx:=option;
msdos(regs);
error:=regs.ax and $ff;
i:=1;
repeat
namr[i]:=chr(mem[segment:offset+29+i]);
i:=i+1;
until (not(namr[i-1] in [' '..'~']));
att:=mem[segment:offset+21];
namr[0]:=chr(i-1);
end;
procedure getnextentry(var namr:string80; segment,offset:integer;
option:integer;var error:integer);
var
i:integer;
begin
error:=0;
regs.ax:=$4f00;
regs.cx:=option;
msdos(regs);
error:=regs.ax and $ff;
i:=1;
repeat
namr[i]:=chr(mem[segment:offset+29+i]);
i:=i+1;
until (not(namr[i-1] in [' '..'~']));
att:=mem[segment:offset+21];
namr[0]:=chr(i-1);
end;
begin
for i:=1 to 21 do dta[i]:=0;
for i:=1 to 80 do
begin
mask[i]:=chr(0);
namr[i]:=chr(0);
end;
namr[0]:=chr(0);
writeln('QDL version @.0A');
writeln;
getcurrentdta(dtaseg,dtaofs,error);
if (error<>0 ) then
begin
writeln('unable to get current dta');
writeln('program aborting');
halt;
end;
setdtaseg:=seg(dta);
setdtaofs:=ofs(dta);
setdta(setdtaseg,setdtaofs,error);
if (error<>0) then
begin
writeln('Cannot reset dta');
writeln('Program aborting');
halt;
end;
error:=0;
buffer[0]:=chr(0);
getoption(option);
if (option<>8) then
begin
write('file mask :');
readln(buffer);
writeln;
end;
if (length(buffer)=0 ) then
buffer:='????????.???';
for i:=1 to length(buffer) do
mask[i]:=buffer[i];
getfirst(mask,namr,setdtaseg,setdtaofs,option,error);
if (error=0) then
begin
if (option <> 8) then
begin
writeln('Directory of : ',buffer);
writeln;
end;
if option<>16 then
writeln(namr)
else
if att=16 then
writeln(namr);
end
else
if option=8 then
writeln('Volume label not found')
else
writeln('File ''', buffer, ''' not found.');
while (error=0) do
begin
getnextentry(namr,setdtaseg,setdtaofs,option,error);
if (error=0) then
begin
if option<>16 then
begin
write(namr);
if att=16 then writeln (' <DIR> ') else writeln
end
else
if att=16 then
writeln(namr);
end;
end;
setdta(dtaseg,dtaofs,error);
end.